/******************************************************************************
 *  _____     _____
 *  \  __\    \  __\
 *   \ \_\\    \ \_\\
 *    \  __\SS  \  __\roject
 *     \_\       \_\
 *
 * Mateusz Maciąg, Rafał Urbański
 * Komputerowe Systemy Sterowania
 *****************************************************************************/

#ifndef CREATEARXDIALOG_H
#define CREATEARXDIALOG_H

#include "ARXPreset.h"

#include <QDialog>

#include <string>

namespace Ui {
    class CreateARXDialog;
}

/**
    Okno dialogowe służące do tworzenia modeli.
*/
class CreateARXDialog : public QDialog
{
    Q_OBJECT

public:
    explicit CreateARXDialog(QWidget *parent = 0);
    ~CreateARXDialog();

    /**
        Zwraca maksymalny rząd mianownika transmitancji wybrany przez użytkownika.
    */
    unsigned int getADegree() const;

    /**
        Zwraca maksymalny rząd licznika transmitancji wybrany przez użytkownika.
    */
    unsigned int getBDegree() const;

    /**
        Zwraca maksymalny rząd licznika transmitancji wybrany przez użytkownika.
    */
    unsigned int getCDegree() const;

    /**
        Zwraca maksymalny rząd mianownika transmitancji przy delcie.
    */
    unsigned int getAgDegree() const;

    /**
        Zwraca maksymalne d.
    */
    unsigned int getD() const;

    /**
        Zwraca maksymalne opóźnienie wybrane przez użytkownika.
    */
    unsigned int getDelay() const;

    /**
        Zwraca nazwę obiektu wpisaną przez użytkownika.
    */
    QString getARXName() const;

    /**
        Zwraca \i preset wybrany przez użytkownika.
    */
    RafMat::UI::ARXPresetSPtr getPreset() const;

    /**
        Zwraca flagę informującą o tym, czy użytkownik wybrał preset lub sam wpisywał parametry.
        \return True - użytkownik wybrał, któryś z układów predefiniowanych. False - użytkownik
        tworzy pusty obiekt z ręcznie zdefiniowanymi ograniczeniami na rząd układu.
    */
    bool isPresetSelected() const;

private slots:
    void on_usePreset_toggled(bool checked);
    void on_presetBox_currentIndexChanged(int index);

    //void on_buttonBox_accepted();

private:

    /** Odświeża listę \i presetów. */
    void updatePresets();

    /**
        Odświeża ograniczenia narzucone na pola edycji
        \param checked Flaga określająca stan zaznaczenia opcji wyboru predefiniowanego układu.
    */
    void refreshConstraints(bool checked);

    Ui::CreateARXDialog *ui;
};

#endif // CREATEARXDIALOG_H
